1 from tkinter import *
2 import time
3 import sqlite3
4 import random
5 import tempfile
6 import win32api
7 import win32print
8
9 f=''
10 flag=''
11 flags=''
12
13 login=sqlite3.connect("admin.db")
14 l=login.cursor()
15
16 c=sqlite3.connect("medicine.db")
17 cur=c.cursor()
18
19 columns=('Sl No', 'Name', 'Type', 'Quantity Left', 'Cost', 'Purpose', 'Expiry Date', 'Rack location', 'Manufacture')
20
21 def open_win(): #OPENS MAIN MENU----------------------------------------------------------------------------MAIN MENU
22 global apt, flag
23 flag='apt'
24 apt=Tk()
25 apt.title("Interface")
26 Label(apt, text="CHEMIST AND DRUGSHOP").grid(row=0,column=0,columnspan=3)
27 Label(apt, text='*'*80).grid(row=1,column=0,columnspan=3)
28 Label(apt, text='-'*80).grid(row=3,column=0,columnspan=3)
29
30 Label(apt, text="Stock Maintenance").grid(row=2,column=0)
31 Button(apt,text='New V.C.', width=25, command=val_cus).grid(row=4,column=0)
32 Button(apt,text='Add product to Stock', width=25,command=stock).grid(row=5,column=0)
33 Button(apt,text='Delete product from Stock', width=25,command=delete_stock).grid(row=6,column=0)
34
35
36 Label(apt, text="Access Database").grid(row=2,column=1)
37 Button(apt,text='Modify',width=15, command=modify).grid(row=4,column=1)
38 Button(apt,text='Search', width=15, command=search).grid(row=5,column=1)
39 Button(apt,text='Expiry Check', width=15, command=exp_date).grid(row=6,column=1)
40
41 Label(apt, text="Handle Cash Flows").grid(row=2,column=2)
42 Button(apt,text="Check Today's Revenue", width=20,command=show_rev).grid(row=5,column=2)
43 Button(apt,text='Billing', width=20, command=billing).grid(row=4,column=2)
44
45 Label(apt, text='-'*80).grid(row=12,column=0,columnspan=3)
46 Button(apt,text='Logout',command=again).grid(row=13, column=2)
47 apt.mainloop()
48
49 def delete_stock(): #OPENS DELETE WINDOW----------------------------------------------------DELETES A PARTICULAR STOCK ITEM
50 global cur, c, flag, lb1, d
51 apt.destroy()
52 flag='d'
53 d=Tk()
54 d.title("Delete a product from Stock")
55 Label(d,text='Enter Product to delete:').grid(row=0,column=0)
56 Label(d,text='',width=30,bg='white').grid(row=0,column=1)
57 Label(d,text='Product').grid(row=2,column=0)
58 Label(d,text='Qty. Exp.dt. Cost ').grid(row=2,column=1)
59 ren()
60 b=Button(d,width=20,text='Delete',command=delt).grid(row=0,column=3)
61 b=Button(d,width=20,text='Main Menu',command=main_menu).grid(row=5,column=3)
62 d.mainloop()
63
64 def ren():
65 global lb1,d,cur,c
66 def onvsb(*args):
67 lb1.yview(*args)
68 lb2.yview(*args)
69 def onmousewheel():
70 lb1.ywiew=('scroll',event.delta,'units')
71 lb2.ywiew=('scroll',event.delta,'units')
72 return 'break'
73 cx=0
74 vsb=Scrollbar(orient='vertical',command=onvsb)
75 lb1=Listbox(d,width=25, yscrollcommand=vsb.set)
76 lb2=Listbox(d,width=30,yscrollcommand=vsb.set)
77 vsb.grid(row=3,column=2,sticky=N+S)
78 lb1.grid(row=3,column=0)
79 lb2.grid(row=3,column=1)
80 lb1.bind('<MouseWheel>',onmousewheel)
81 lb2.bind('<MouseWheel>',onmousewheel)
82 cur.execute("select *from med")
83 for i in cur:
84 cx+=1
85 s1=[str(i[0]),str(i[1])]
86 s2=[str(i[3]),str(i[6]),str(i[4])]
87 lb1.insert(cx,'. '.join(s1))
88 lb2.insert(cx,' '.join(s2))
89 c.commit()
90 lb1.bind('<<ListboxSelect>>', sel_del)
91
92 def sel_del(e):
93 global lb1, d, cur, c,p, sl2
94 p=lb1.curselection()
95 print (p)
96 x=0
97 sl2=''
98 cur.execute("select * from med")
99 for i in cur:
100 print (x, p[0])
101 if x==int(p[0]):
102 sl2=i[0]
103 break
104 x+=1
105 c.commit()
106 print (sl2)
107 Label(d,text=' ',bg='white', width=20).grid(row=0,column=1)
108 cur.execute('Select * from med')
109 for i in cur:
110 if i[0]==sl2:
111 Label(d,text=i[0]+'. '+i[1],bg='white').grid(row=0,column=1)
112 c.commit()
113
114 def delt():
115 global p,c,cur,d
116 cur.execute("delete from med where sl_no=?",(sl2,))
117 c.commit()
118 ren()
119
120 def modify(): # window for modification-----------------------------------------------------------------------MODIFY
121 global cur, c, accept, flag, att, up, n, name_, apt, st, col,col_n
122 col=('', '', 'type', 'qty_left', 'cost', 'purpose', 'expdt', 'loc', 'mfg')
123 col_n=('', '', 'Type', 'Quantity Left', 'Cost', 'Purpose', 'Expiry Date', 'Rack location', 'Manufacture')
124 flag='st'
125 name_=''
126 apt.destroy()
127 n=[]
128 cur.execute("select * from med")
129 for i in cur:
130 n.append(i[1])
131 c.commit()
132 st=Tk()
133 st.title('MODIFY')
134 Label(st, text='-'*48+' MODIFY DATABASE '+'-'*48).grid(row=0, column=0,columnspan=6)
135 def onvsb(*args):
136 name_.yview(*args)
137 def onmousewheel():
138 name_.ywiew=('scroll',event.delta,'units')
139 return 'break'
140 cx=0
141 vsb=Scrollbar(orient='vertical',command=onvsb)
142 vsb.grid(row=1,column=3,sticky=N+S)
143 name_=Listbox(st,width=43,yscrollcommand=vsb.set)
144 cur.execute("select *from med")
145 for i in cur:
146 cx+=1
147 name_.insert(cx,(str(i[0])+'. '+str(i[1])))
148 name_.grid(row=1,column=1,columnspan=2)
149 c.commit()
150 name_.bind('<MouseWheel>',onmousewheel)
151 name_.bind('<<ListboxSelect>>', sel_mn)
152
153 Label(st, text='Enter Medicine Name: ').grid(row=1, column=0)
154 Label(st, text='Enter changed Value of: ').grid(row=2, column=0)
155 att=Spinbox(st, values=col_n)
156 att.grid(row=2, column=1)
157 up=Entry(st)
158 up.grid(row=2, column=2)
159 Button(st,width=10,text='Submit', command=save_mod).grid(row=2, column=4)
160 Button(st,width=10,text='Reset', command=res).grid(row=2, column=5)
161 Button(st,width=10,text='Show data', command=show_val).grid(row=1, column=4)
162 Label(st, text='-'*120).grid(row=3,column=0,columnspan=6)
163 Button(st,width=10,text='Main Menu',command=main_menu).grid(row=5,column=5)
164 st.mainloop()
165
166 def res():
167 global st, up
168 up=Entry(st)
169 up.grid(row=2, column=2)
170 Label(st,width=20, text=' ').grid(row=5,column=i)
171
172 def sel_mn(e):
173 global n,name_, name_mn, sl, c, cur
174 name_mn=''
175 p=name_.curselection()
176 print (p)
177 x=0
178 sl=''
179 cur.execute("select * from med")
180 for i in cur:
181 print (x, p[0])
182 if x==int(p[0]):
183 sl=i[0]
184 break
185 x+=1
186 c.commit()
187 print (sl)
188 name_nm=n[int(sl)]
189 print (name_nm)
190
191 def show_val():
192 global st, name_mn, att, cur, c, col, col_n, sl
193 for i in range(3):
194 Label(st,width=20, text=' ').grid(row=5,column=i)
195 cur.execute("select * from med")
196 for i in cur:
197 for j in range(9):
198 if att.get()==col_n[j] and sl==i[0]:
199 Label(st, text=str(i[0])).grid(row=5,column=0)
200 Label(st, text=str(i[1])).grid(row=5,column=1)
201 Label(st, text=str(i[j])).grid(row=5,column=2)
202 c.commit()
203
204 def save_mod(): #save modified data
205 global cur, c, att, name_mn, st, up, col_n, sl
206 for i in range(9):
207 if att.get()==col_n[i]:
208 a=col[i]
209 sql="update med set '%s' = '%s' where sl_no = '%s'" % (a,up.get(),sl)
210 cur.execute(sql)
211 c.commit()
212 Label(st, text='Updated!').grid(row=5,column=4)
213
214
215 def stock(): #add to stock window------------------------------------------------------------------------ADD TO STOCK
216 global cur, c, columns, accept, flag, sto, apt
217 apt.destroy()
218 flag='sto'
219 accept=['']*10
220 sto=Tk()
221 sto.title('STOCK ENTRY')
222 Label(sto,text='ENTER NEW PRODUCT DATA TO THE STOCK').grid(row=0,column=0,columnspan=2)
223 Label(sto,text='-'*50).grid(row=1,column=0,columnspan=2)
224 for i in range(1,len(columns)):
225 Label(sto,width=15,text=' '*(14-len(str(columns[i])))+str(columns[i])+':').grid(row=i+2,column=0)
226 accept[i]=Entry(sto)
227 accept[i].grid(row=i+2, column=1)
228 Button(sto,width=15,text='Submit',command=submit).grid(row=12,column=1)
229 Label(sto,text='-'*165).grid(row=13,column=0,columnspan=7)
230 Button(sto,width=15,text='Reset',command=reset).grid(row=12,column=0)
231 Button(sto,width=15,text='Refresh stock',command=ref).grid(row=12,column=4)
232 for i in range(1,6):
233 Label(sto,text=columns[i]).grid(row=14,column=i-1)
234 Label(sto,text='Exp Rack Manufacturer ').grid(row=14,column=5)
235 Button(sto,width=10,text='Main Menu',command=main_menu).grid(row=12,column=5)
236 ref()
237 sto.mainloop()
238
239 def ref(): # creates a multi-listbox manually to show the whole database
240 global sto, c, cur
241 def onvsb(*args):
242 lb1.yview(*args)
243 lb2.yview(*args)
244 lb3.yview(*args)
245 lb4.yview(*args)
246 lb5.yview(*args)
247 lb6.yview(*args)
248
249 def onmousewheel():
250 lb1.ywiew=('scroll',event.delta,'units')
251 lb2.ywiew=('scroll',event.delta,'units')
252 lb3.ywiew=('scroll',event.delta,'units')
253 lb4.ywiew=('scroll',event.delta,'units')
254 lb5.ywiew=('scroll',event.delta,'units')
255 lb6.ywiew=('scroll',event.delta,'units')
256
257 return 'break'
258 cx=0
259 vsb=Scrollbar(orient='vertical',command=onvsb)
260 lb1=Listbox(sto,yscrollcommand=vsb.set)
261 lb2=Listbox(sto,yscrollcommand=vsb.set)
262 lb3=Listbox(sto,yscrollcommand=vsb.set,width=10)
263 lb4=Listbox(sto,yscrollcommand=vsb.set,width=7)
264 lb5=Listbox(sto,yscrollcommand=vsb.set,width=25)
265 lb6=Listbox(sto,yscrollcommand=vsb.set,width=37)
266 vsb.grid(row=15,column=6,sticky=N+S)
267 lb1.grid(row=15,column=0)
268 lb2.grid(row=15,column=1)
269 lb3.grid(row=15,column=2)
270 lb4.grid(row=15,column=3)
271 lb5.grid(row=15,column=4)
272 lb6.grid(row=15,column=5)
273 lb1.bind('<MouseWheel>',onmousewheel)
274 lb2.bind('<MouseWheel>',onmousewheel)
275 lb3.bind('<MouseWheel>',onmousewheel)
276 lb4.bind('<MouseWheel>',onmousewheel)
277 lb5.bind('<MouseWheel>',onmousewheel)
278 lb6.bind('<MouseWheel>',onmousewheel)
279 cur.execute("select *from med")
280 for i in cur:
281 cx+=1
282 seq=(str(i[0]),str(i[1]))
283 lb1.insert(cx,'. '.join(seq))
284 lb2.insert(cx,i[2])
285 lb3.insert(cx,i[3])
286 lb4.insert(cx,i[4])
287 lb5.insert(cx,i[5])
288 lb6.insert(cx,i[6]+' '+i[7]+' '+i[8])
289 c.commit()
290
291 def reset():
292 global sto, accept
293 for i in range(1,len(columns)):
294 Label(sto,width=15,text=' '*(14-len(str(columns[i])))+str(columns[i])+':').grid(row=i+2,column=0)
295 accept[i]=Entry(sto)
296 accept[i].grid(row=i+2, column=1)
297
298 def submit(): #for new stock submission
299 global accept, c, cur, columns, sto
300 prev=time.clock()
301 x=['']*10
302 cur.execute("select * from med")
303 for i in cur:
304 y=int(i[0])
305 for i in range(1,9):
306 x[i]=accept[i].get()
307 sql="insert into med values('%s','%s','%s','%s','%s','%s','%s','%s','%s')" % (y+1,x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8])
308 cur.execute(sql)
309 cur.execute("select * from med")
310 c.commit()
311 now=time.clock()
312 print (now-prev)
313 top=Tk()
314 Label(top,width=20, text='Success!').pack()
315 top.mainloop()
316 main_menu()
317
318 def chk(): #checks if the medicine is already present so that can be modified
319 global cur, c, accept, sto
320 cur.execute("select * from med")
321 for i in cur:
322 if accept[6].get()==i[6] and i[1]==accept[1].get():
323 sql="update med set qty_left = '%s' where name = '%s'" % (str(int(i[3])+int(accept[3].get())),accept[1].get())
324 cur.execute(sql)
325 c.commit()
326 top=Tk()
327 Label(top,width=20, text='Modified!').pack()
328 top.mainloop()
329 main_menu()
330 else:
331 submit()
332 c.commit()
333
334 def exp_date(): # expiry window open-----------------------------------------------------------------------------EXPIRY
335 global exp, s,c, cur, flag, apt, flags
336 apt.destroy()
337 flag='exp'
338 from datetime import date
339 now=time.localtime()
340 n=[]
341 cur.execute("select *from med")
342 for i in cur:
343 n.append(i[1])
344 c.commit()
345 exp=Tk()
346 exp.title('EXPIRY CHECK')
347 Label(exp,text='Today : '+str(now[2])+'/'+str(now[1])+'/'+str(now[0])).grid(row=0, column=0, columnspan=3)
348 Label(exp,text='Selling Expired Medicines and Drugs is Illegal').grid(row=1, column=0,columnspan=3)
349 Label(exp,text='-'*80).grid(row=2, column=0,columnspan=3)
350 s=Spinbox(exp,values=n)
351 s.grid(row=3, column=0)
352 Button(exp,text='Check Expiry date', command=s_exp).grid(row=3, column=1)
353 Label(exp,text='-'*80).grid(row=4, column=0,columnspan=3)
354 if flags=='apt1':
355 Button(exp,text='Main Menu', command=main_cus).grid(row=5, column=2)
356 else:
357 Button(exp,width=20,text='Check Products expiring', command=exp_dt).grid(row=5, column=0)
358 Button(exp,text='Main Menu', command=main_menu).grid(row=5, column=2)
359 exp.mainloop()
360
361 def s_exp(): # shows the expiry date of the medicine entered
362 global c, cur, s, exp, top
363 from datetime import date
364 now=time.localtime()
365 d1 = date(now[0],now[1],now[2])
366 cur.execute("select * from med")
367 for i in cur:
368 if(i[1]==s.get()):
369 q=i[6]
370 d2=date(int('20'+q[8:10]),int(q[3:5]),int(q[0:2]))
371 if d1>d2:
372 Label(exp, text='EXPIRED! on '+i[6]).grid(row=3, column=2)
373 top=Tk()
374 Label(top, text='EXPIRED!').pack()
375 else:
376 Label(exp, text=i[6]).grid(row=3, column=2)
377 c.commit()
378
379 def exp_dt(): # shows medicine to expire in the coming week
380 global c, cur, exp, top
381 x=0
382 z=1
383 from datetime import datetime, timedelta
384 N = 7
385 dt = datetime.now() + timedelta(days=N)
386 d=str(dt)
387 from datetime import date
388 now=time.localtime()
389 d1 = date(now[0],now[1],now[2])
390 d3 = date(int(d[0:4]),int(d[5:7]),int(d[8:10]))
391 Label(exp,text='S.No'+' '+'Name'+' Qty. '+'Exp_date').grid(row=6,column=0,columnspan=2)
392 cur.execute("select * from med")
393 for i in cur:
394 s=i[6]
395 d2=date(int('20'+s[8:10]),int(s[3:5]),int(s[0:2]))
396
397 if d1<d2<d3:
398 Label(exp,text=str(z)+'. '+str(i[1])+' '+str(i[3])+' '+str(i[6])).grid(row=x+7,column=0,columnspan=2)
399 x+=1
400 z+=1
401 elif d1>d2:
402 top=Tk()
403 Label(top,width=20, text=str(i[1])+' is EXPIRED!').pack()
404 c.commit()
405
406 def billing(): # to create bills for customer-------------------------------------------------------------BILLING system
407 global c, cur, apt, flag, t, name, name1, add, st, names, qty, sl, qtys, vc_id, n, namee, lb1
408 t=0
409 vc_id=''
410 names=[]
411 qty=[]
412 sl=[]
413 n=[]
414 qtys=['']*10
415 cur.execute("select *from med")
416 for i in cur:
417 n.append(i[1])
418 c.commit()
419 if flag=='st':
420 st.destroy()
421 else:
422 apt.destroy()
423 flag='st'
424 st=Tk()
425 st.title('BILLING SYSTEM')
426 Label(st,text='-'*48+'BILLING SYSTEM'+'-'*49).grid(row=0,column=0,columnspan=7)
427 Label(st,text='Enter Name: ').grid(row=1,column=0)
428 name1=Entry(st)
429 name1.grid(row=1, column=1)
430 Label(st,text='Enter Address: ').grid(row=2,column=0)
431 add=Entry(st)
432 add.grid(row=2, column=1)
433 Label(st,text="Value Id (if available)").grid(row=3, column=0)
434 vc_id=Entry(st)
435 vc_id.grid(row=3, column=1)
436 Button(st,text='Check V.C.', command=blue).grid(row=4, column=0)
437 Label(st,text='-'*115).grid(row=6, column=0,columnspan=7)
438 Label(st,text='SELECT PRODUCT',width=25,relief='ridge').grid(row=7, column=0)
439 Label(st,text=' RACK QTY LEFT COST ',width=25,relief='ridge').grid(row=7, column=1)
440 Button(st,text='Add to bill',width=15,command=append2bill).grid(row=8, column=6)
441 Label(st,text='QUANTITY',width=20,relief='ridge').grid(row=7, column=5)
442 qtys=Entry(st)
443 qtys.grid(row=8,column=5)
444 refresh()
445 Button(st,width=15,text='Main Menu', command=main_menu).grid(row=1,column=6)
446 Button(st,width=15,text='Refresh Stock', command=refresh).grid(row=3,column=6)
447 Button(st,width=15,text='Reset Bill', command=billing).grid(row=4,column=6)
448 Button(st,width=15,text='Print Bill', command=print_bill).grid(row=5,column=6)
449 Button(st,width=15,text='Save Bill', command=make_bill).grid(row=7,column=6)
450
451 st.mainloop()
452
453 def refresh():
454 global cur, c, st, lb1, lb2, vsb
455 def onvsb(*args):
456 lb1.yview(*args)
457 lb2.yview(*args)
458
459 def onmousewheel():
460 lb1.ywiew=('scroll',event.delta,'units')
461 lb2.ywiew=('scroll',event.delta,'units')
462 return 'break'
463 cx=0
464 vsb=Scrollbar(orient='vertical',command=onvsb)
465 lb1=Listbox(st,width=25, yscrollcommand=vsb.set)
466 lb2=Listbox(st ,width=25,yscrollcommand=vsb.set)
467 vsb.grid(row=8,column=2,sticky=N+S)
468 lb1.grid(row=8,column=0)
469 lb2.grid(row=8,column=1)
470 lb1.bind('<MouseWheel>',onmousewheel)
471 lb2.bind('<MouseWheel>',onmousewheel)
472 cur.execute("select *from med")
473 for i in cur:
474 cx+=1
475 lb1.insert(cx,str(i[0])+'. '+str(i[1]))
476 lb2.insert(cx,' '+str(i[7])+' '+str(i[3])+' Rs '+str(i[4]))
477 c.commit()
478 lb1.bind('<<ListboxSelect>>', select_mn)
479
480 def select_mn(e): #store the selected medicine from listbox
481 global st, lb1, n ,p, nm, sl1
482 p=lb1.curselection()
483 x=0
484 sl1=''
485 from datetime import date
486 now=time.localtime()
487 d1 = date(now[0],now[1],now[2])
488 cur.execute("select * from med")
489 for i in cur:
490 if x==int(p[0]):
491 sl1=int(i[0])
492 break
493 x+=1
494 c.commit()
495 print (sl1)
496 nm=n[x]
497 print (nm)
498
499 def append2bill(): # append to the bill
500 global st, names, nm , qty, sl,cur, c, sl1
501 sl.append(sl1)
502 names.append(nm)
503 qty.append(qtys.get())
504 print (qty)
505 print (sl[len(sl)-1],names[len(names)-1],qty[len(qty)-1])
506
507 def blue(): # check if valued customer
508 global st ,c, cur, named, addd, t, vc_id
509 cur.execute("select * from cus")
510 for i in cur:
511 if vc_id.get()!='' and int(vc_id.get())==i[2]:
512 named=i[0]
513 addd=i[1]
514 Label(st,text=named,width=20).grid(row=1, column=1)
515 Label(st,text=addd,width=20).grid(row=2, column=1)
516 Label(st,text=i[2],width=20).grid(row=3, column=1)
517 Label(st, text='Valued Customer!').grid(row=4, column=1)
518 t=1
519 break
520 c.commit()
521
522 def make_bill(): # makes bill
523 global t, c, B, cur, st, names, qty, sl , named, addd, name1, add,det, vc_id
524 price=[0.0]*10
525 q=0
526 det=['','','','','','','','']
527 det[2]=str(sl)
528 for i in range(len(sl)):
529 print (sl[i],' ',qty[i],' ',names[i])
530 for k in range(len(sl)):
531 cur.execute("select * from med where sl_no=?",(sl[k],))
532 for i in cur:
533 price[k]=int(qty[k])*float(i[4])
534 print (qty[k],price[k])
535 cur.execute("update med set qty_left=? where sl_no=?",(int(i[3])-int(qty[k]),sl[k]))
536 c.commit()
537 det[5]=str(random.randint(100,999))
538 B='bill_'+str(det[5])+'.txt'
539 total=0.00
540 for i in range(10):
541 if price[i] != '':
542 total+=price[i] #totalling
543 m='\n\n\n'
544 m+="===============================================\n"
545 m+=" No :%s\n\n" % det[5]
546 m+=" MEDPLUS CHEMIST AND DRUGGIST\n"
547 m+=" VIT University, Katpadi, Vellore, T.M.\n\n"
548 m+="-----------------------------------------------\n"
549 if t==1:
550 m+="Name: %s\n" % named
551 m+="Address: %s\n" % addd
552 det[0]=named
553 det[1]=addd
554 cur.execute('select * from cus')
555 for i in cur:
556 if i[0]==named:
557 det[7]=i[2]
558 else:
559 m+="Name: %s\n" % name1.get()
560 m+="Address: %s\n" % add.get()
561 det[0]=name1.get()
562 det[1]=add.get()
563 m+="-----------------------------------------------\n"
564 m+="Product Qty. Price\n"
565 m+="-----------------------------------------------\n"#47, qty=27, price=8 after 2
566 for i in range(len(sl)):
567 if names[i] != 'nil':
568 s1=' '
569 s1=(names[i]) + (s1 * (27-len(names[i]))) + s1*(3-len(qty[i])) +qty[i]+ s1*(15-len(str(price[i])))+str(price[i]) + '\n'
570 m+=s1
571 m+="\n-----------------------------------------------\n"
572 if t==1:
573 ntotal=total*0.8
574 m+='Total'+(' '*25)+(' '*(15-len(str(total)))) + str(total)+'\n'
575 m+="Valued customer Discount"+ (' '*(20-len(str(total-ntotal))))+'-'+str(total-ntotal)+'\n'
576 m+="-----------------------------------------------\n"
577 m+='Total'+(' '*25)+(' '*(12-len(str(ntotal)))) +'Rs '+ str(ntotal)+'\n'
578 det[3]=str(ntotal)
579 else:
580 m+='Total'+(' '*25)+(' '*(12-len(str(total)))) +'Rs '+ str(total)+'\n'
581 det[3]=str(total)
582
583 m+="-----------------------------------------------\n\n"
584 m+="Dealer 's signature:___________________________\n"
585 m+="===============================================\n"
586 print (m)
587 p=time.localtime()
588 det[4]=str(p[2])+'/'+str(p[1])+'/'+str(p[0])
589 det[6]=m
590 bill=open(B,'w')
591 bill.write(m)
592 bill.close()
593 cb=('cus_name','cus_add','items','Total_cost','bill_dt','bill_no','bill','val_id')
594 cur.execute('insert into bills values(?,?,?,?,?,?,?,?)',(det[0],det[1],det[2],det[3],det[4],det[5],det[6],det[7]))
595 c.commit()
596
597 def print_bill():
598 win32api.ShellExecute (0,"print",B,'/d:"%s"' % win32print.GetDefaultPrinter (),".",0)
599
600 def show_rev(): # opens revenue window-----------------------------------------------------------------------TOTAL REVENUE
601 global c, cur, flag,rev
602 apt.destroy()
603 cb=('cus_name','cus_add','items','Total_cost','bill_dt','bill_no','bill','val_id')
604 flag='rev'
605 rev=Tk()
606 total=0.0
607 today=str(time.localtime()[2])+'/'+str(time.localtime()[1])+'/'+str(time.localtime()[0])
608 Label(rev,text='Today: '+today).grid(row=0,column=0)
609 cur.execute('select * from bills')
610 for i in cur:
611 if i[4]==today:
612 total+=float(i[3])
613 print (total)
614 Label(rev,width=22,text='Total revenue: Rs '+str(total), bg='black',fg='white').grid(row=1,column=0)
615 cx=0
616 vsb=Scrollbar(orient='vertical')
617 lb1=Listbox(rev,width=25, yscrollcommand=vsb.set)
618 vsb.grid(row=2,column=1,sticky=N+S)
619 lb1.grid(row=2,column=0)
620 vsb.config( command = lb1.yview )
621 cur.execute("select * from bills")
622 for i in cur:
623 if i[4]==today:
624 cx+=1
625 lb1.insert(cx,'Bill No.: '+str(i[5])+' : Rs '+str(i[3]))
626 c.commit()
627 Button(rev,text='Main Menu',command=main_menu).grid(row=15,column=0)
628 rev.mainloop()
629
630
631 def search(): #search window medicine and symptom details---------------------------------SEARCH MEDICINE RACK & SYMPTOMS
632 global c, cur, flag, st, mn, sym, flags
633 flag='st'
634 apt.destroy()
635 cur.execute("Select * from med")
636 symp=['nil']
637 med_name=['nil']
638 for i in cur:
639 symp.append(i[5])
640 med_name.append(i[1])
641 st=Tk()
642 st.title('SEARCH')
643 Label(st, text=' SEARCH FOR MEDICINE ').grid(row=0, column=0,columnspan=3)
644 Label(st, text='~'*40).grid(row=1, column=0,columnspan=3)
645 Label(st, text='Symptom Name').grid(row=3, column=0)
646 sym=Spinbox(st,values=symp)
647 sym.grid(row=3, column=1)
648 Button(st,width=15, text='Search', command=search_med).grid(row=3, column=2)
649 Label(st, text='-'*70).grid(row=4, column=0,columnspan=3)
650 if flags=='apt1':
651 Button(st,width=15, text='Main Menu', command=main_cus).grid(row=6, column=2)
652 else:
653 Button(st,width=15, text='Main Menu', command=main_menu).grid(row=6, column=2)
654 st.mainloop()
655
656 def search_med():
657 global c, cur, st, sym, columns
658 cur.execute("select * from med")
659 y=[]
660 x=0
661 for i in cur:
662 if i[5]==sym.get():
663 y.append(str(i[0])+'. '+str(i[1])+' Rs '+str(i[4])+' Rack : '+str(i[7])+' Mfg : '+str(i[8]))
664 x=x+1
665 top=Tk()
666 for i in range(len(y)):
667 Label(top,text=y[i]).grid(row=i, column=0)
668 Button(top,text='OK',command=top.destroy).grid(row=5, column=0)
669 c.commit()
670 top.mainloop()
671
672 def val_cus(): #to enter new valued customer-----------------------------------------------------------NEW VALUED CUSTOMER
673 global val, flag, dbt, name_vc, add_vc, cur, c, vc_id
674 apt.destroy()
675 cur.execute("select * from cus")
676 flag='val'
677 val=Tk()
678 Label(val,text="ENTER VALUED CUSTOMER DETAILS").grid(row=0,column=0,columnspan=3)
679 Label(val,text="-"*60).grid(row=1,column=0,columnspan=3)
680 Label(val,text="Name: ").grid(row=2,column=0)
681 name_vc=Entry(val)
682 name_vc.grid(row=2, column=1)
683 Label(val,text="Address: ").grid(row=3,column=0)
684 add_vc=Entry(val)
685 add_vc.grid(row=3, column=1)
686 Label(val,text="Value Id: ").grid(row=4,column=0)
687 vc_id=Entry(val)
688 vc_id.grid(row=4, column=1)
689 Button(val,text='Submit',command=val_get).grid(row=5, column=1)
690 Button(val,text='Main Menu',command=main_menu).grid(row=5, column=2)
691 Label(val,text='-'*60).grid(row=6,column=0,columnspan=3)
692 val.mainloop()
693
694 def val_get(): #to submit new valued customer details
695 global name_vc, add_vc, val, dbt ,c, cur, apt, vc_id
696 cur.execute("insert into cus values(?,?,?)",(name_vc.get(),add_vc.get(),vc_id.get()))
697 l.execute("insert into log values(?,?)",(name_vc.get(),vc_id.get()))
698 cur.execute("select * from cus")
699 for i in cur:
700 print (i[0], i[1], i[2])
701 c.commit()
702 login.commit()
703
704 def again(): #for login window-----------------------------------------------------------------------------LOGIN WINDOW
705 global un, pwd, flag, root, apt
706 if flag=='apt':
707 apt.destroy()
708 root=Tk()
709 root.title('YashVone SOFTWARE SOLUTIONS')
710 Label(root,text='CHEMIST AND DRUG SHOP').grid(row=0,column=0,columnspan=5)
711 Label(root,text="VIT UNIVERSITY, KATPADI, VELLORE, TM").grid(row=1,column=0,columnspan=5)
712 Label(root,text='-------------------------------------------------------').grid(row=2,column=0,columnspan=5)
713 Label(root, text='Username').grid(row=3, column=0)
714 un=Entry(root,width=10)
715 un.grid(row=3, column=1)
716 Label(root, text='Password').grid(row=4, column=0)
717 pwd=Entry(root,width=10)
718 pwd.grid(row=4, column=1)
719 Button(root,width=6,text='Enter',command=check).grid(row=5, column=0)
720 Button(root,width=6,text='Close',command=root.destroy).grid(row=5, column=1)
721 root.mainloop()
722
723 def check(): #for enter button in login window
724 global un, pwd, login, l, root
725 u=un.get()
726 p=pwd.get()
727 l.execute("select * from log")
728 for i in l:
729 if i[0]==u and i[1]==p and u=='admin':
730 root.destroy()
731 open_win()
732 elif i[0]==u and i[1]==p:
733 root.destroy()
734 open_cus()
735 login.commit()
736
737 def main_menu(): #controls open and close of main menu window----------------------------------------RETURN TO MAIN MENU
738 global sto, apt, flag, root, st, val, exp, st1,rev
739 if flag=='sto':
740 sto.destroy()
741 if flag=='rev':
742 rev.destroy()
743 elif flag=='st':
744 st.destroy()
745 elif flag=='st1':
746 st1.destroy()
747 elif flag=='val':
748 val.destroy()
749 elif flag=='exp':
750 exp.destroy()
751 elif flag=='d':
752 d.destroy()
753 open_win()
754
755 def main_cus():
756 global st, flag, exp
757 if flag=='exp':
758 exp.destroy()
759 elif flag=='st':
760 st.destroy()
761 open_cus()
762
763 def open_cus(): #OPENS MAIN MENU----------------------------------------------------------------------------MAIN MENU
764 global apt, flag, flags
765 flags='apt1'
766 apt=Tk()
767 apt.title("Interface")
768 Label(apt, text="MEDPLUS CHEMIST AND DRUGGIST").grid(row=0,column=0)
769 Label(apt, text='*'*40).grid(row=1,column=0)
770 Label(apt, text='* WELCOME *').grid(row=2,column=0)
771 Label(apt, text='-'*40).grid(row=3,column=0)
772 Label(apt, text="Customer Services").grid(row=4,column=0)
773 Label(apt, text='-'*40).grid(row=5,column=0)
774 Button(apt,text='Search', width=15, command=search).grid(row=6,column=0)
775 Button(apt,text='Expiry Check', width=15, command=exp_date).grid(row=7,column=0)
776
777 Label(apt, text='-'*40).grid(row=8,column=0)
778 Button(apt,text='Logout',command=again1).grid(row=9, column=0)
779 apt.mainloop()
780 def again1():
781 global flags
782 apt.destroy()
783 flags=''
784 again()
785 again()